package Thread;

//模拟实现阻塞队列
//此处不考虑泛型参数，只是基于 String 进行存储
//class MyBlockingQueue{
//    private String[] data = null;
//    private static volatile int head = 0;
//    private static volatile int tail = 0;
//    private static volatile int size = 0;
//    private Object locker = new Object();
//
//    public MyBlockingQueue(int capacity){
//        data = new String[capacity];
//    }
//
//    public void put(String s) throws InterruptedException {
//        //加锁的对象，可以单独定义一个，也可以就地使用 this
//        synchronized (this){
//            while(size == data.length){
//                //队列满了
//                //return;
//                this.wait();
//            }
//            data[tail] = s;
//            tail++;
//            if(tail >= data.length){
//                tail = 0;
//            }
//            size++;
//
//            this.notify();
//        }
//    }
//
//    public String take() throws InterruptedException {
//        String ret = "";
//        synchronized (this){
//            while(size == 0){
//                //队列为空
//                //return null;
//                this.wait();
//            }
//            ret = data[head];
//            head++;
//            if(head >= data.length){
//                head = 0;
//            }
//            size--;
//
//            this.notify();
//        }
//        return ret;
//    }
//
//}

public class Demo22 {
    public static void main(String[] args) {

    }
}
